Virtualization allows multiplexing of an underlying host machine between different virtual machines. The host computer allocates a certain amount of its resources to each of the virtual machines. Each virtual machine is then able to use the allocated resources to execute applications (referred to as a guest), including an operating system (referred to as a guest operating system) that runs on the virtual machine.
A guest in a virtual machine system is allocated with virtual disk space. Instead of using the virtual disk space to store contents that the guest may later use, the guest may pass the contents to the host (e.g., a hypervisor) and the host may store the contents in host storage space. One approach for passing contents between a guest and a hypervisor is to add a guest driver to the guest, such that the guest driver can read and write the contents from/to a host location. However, adding a guest driver to the guest means modifying the guest with customized code. Writing the customized code can be error-prone and time-consuming.
Further, a custom-coded guest driver needs to be tailored to each guest operating environment, and installation of the custom-coded guest driver can have different degrees of difficulty in different guest operating environments. For example, it can be easier to install a custom driver in a main guest operating system, and more difficult to install this driver in an early-boot BIOS environment. Additionally, specific applications may need to be written to work with a specific media type. For example, an audio player may only work with an audio CDROM type of media. Thus, multiple applications will need to be written to work with different media types. These myriads of considerations make it difficult to provide a custom-coded guest driver in each guest.